// 引入axios和配置文件
// 导入axios库
import axios from 'axios'
// 导入配置文件
import config from '../config.js'
// 导入element-plus库中的ElLoading组件
import { ElLoading } from 'element-plus'
// 导入通知组件
import notification from './notification'
// 导入路由
import router from '../router'

// 定义基础URL
const baseURL = config.baseURL
let loadingInstance = null

// 创建axios实例
const service = axios.create({
    baseURL,
    timeout: 5000
})

// 添加请求拦截器
// 在请求拦截器中，使用ElLoading.service()方法创建一个加载实例
service.interceptors.request.use(config => {
	loadingInstance = ElLoading.service()
	const token = localStorage.getItem('token')
	if (token) {
		config.headers.Authorization = `Bearer ${token}`
	}
	return config
})

// 添加响应拦截器
// 使用响应拦截器
service.interceptors.response.use(
	// 成功响应的处理函数
	response => {
		// 关闭loading实例
		if (loadingInstance) loadingInstance.close()
		// 解构response.data
		const {
			errno,
			data,
			errmsg
		} = response.data
		// 如果errno为0，表示请求成功
		if (errno === 0) {
			// 如果errmsg不为空，则显示成功提示
			if (errmsg !== '') {
				notification({
					message: errmsg,
					type: 'success'
				})
			}
			// 返回data或true
			return data || true
		}
		// 如果errno不为0，则显示错误提示
		notification({
			message: errmsg,
			type: 'error'
		})
		// 如果errno为2，则跳转到登录页面
		if (errno === 2) {
			router.push({
				name: 'Login'
			})
		}
		// 返回false
		return false
	},
	// 失败响应的处理函数
	error => {
		// 关闭loading实例
		if (loadingInstance) loadingInstance.close()
		// 显示错误提示
		notification({
			message: '请求失败',
			type: 'error'
		})
		// 打印错误信息
		console.log(error)
		return Promise.reject(error)
	}
)

// 导出实例
export default service